package org.lc.stk.security.jwt;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import lombok.Data;

/**
 * JWT配置属性类
 *
 * <p>从classpath下的jwt.properties文件中加载JWT相关配置。
 * 所有属性都以"jwt."为前缀,例如"jwt.secret"。</p>
 *
 * <p>配置项说明:</p>
 * <ul>
 *   <li>secret: JWT签名密钥
 *     <ul>
 *       <li>用于生成和验证JWT的签名</li>
 *       <li>建议使用至少32字节的随机字符串</li>
 *       <li>在生产环境中应妥善保管,定期轮换</li>
 *     </ul>
 *   </li>
 *   <li>expiration: 令牌过期时间
 *     <ul>
 *       <li>单位: 毫秒</li>
 *       <li>建议值: 1小时到24小时</li>
 *       <li>不建议设置太长以降低被盗用风险</li>
 *     </ul>
 *   </li>
 *   <li>header: HTTP请求头名称
 *     <ul>
 *       <li>用于传递JWT的请求头</li>
 *       <li>通常设置为"Authorization"</li>
 *     </ul>
 *   </li>
 *   <li>prefix: 令牌前缀
 *     <ul>
 *       <li>JWT在请求头中的前缀</li>
 *       <li>通常设置为"Bearer "</li>
 *       <li>注意保留末尾空格</li>
 *     </ul>
 *   </li>
 * </ul>
 *
 * <p>配置文件示例(jwt.properties):</p>
 * <pre>
 * jwt.secret=your-secret-key-at-least-32-bytes-long
 * jwt.expiration=3600000
 * jwt.header=Authorization
 * jwt.prefix=Bearer
 * </pre>
 *
 * <p>安全建议:</p>
 * <ul>
 *   <li>不要在代码或配置文件中硬编码敏感信息</li>
 *   <li>在不同环境使用不同的密钥</li>
 *   <li>定期更换密钥</li>
 *   <li>合理设置过期时间</li>
 * </ul>
 */
@Configuration
@PropertySource("classpath:jwt.properties")
@ConfigurationProperties(prefix = "jwt")
@Data
public class JwtProperties {
    /**
     * JWT签名密钥
     * 用于生成JWT签名,保护令牌不被篡改
     */
    private String secret;

    /**
     * 令牌过期时间(毫秒)
     * 用于设置JWT的有效期
     */
    private Long expiration;

    /**
     * JWT令牌请求头名称
     * 默认为"Authorization"
     */
    private String header;

    /**
     * JWT令牌前缀
     * 默认为"Bearer "
     */
    private String prefix;
}